import logging

from flask import g
from flask import render_template,current_app, jsonify
from flask import request
from flask import session

from info import redis_data
from info.models import User, News, Category
from info.utils.commons import user_login_data
from info.utils.response_code import RET
from . import index_blue
from info.utils.captcha.captcha import captcha

#功能描述: 首页新闻列表获取
# 请求路径: /newslist
# 请求方式: GET
# 请求参数: cid,page,per_page
# 返回值: data数据
@index_blue.route('/newslist')
def news_list():
    """
    1.获取参数
    2.参数类型转换,为了分页 做准备,paginate(page,per_page,False)
    3.分页查询
    4.取出分页对象中的属性,总页数,当前页,当前页对象
    5.将当前页对象列表,转成字典列表
    6.返回响应

    主要用的查询语句
        paginate = User.query.paginate(page, per_page,Error_out)
        paginate = User.query.paginate(2,3,False)
        page: 哪一个页
        per_page: 每页多少条数据
        Error_out: False 查不到不报错

        paginate的属性
        pages: 共有多少页
        items: 当前页数的所有对象
        page: 当前页
    :return:
    """
    # 1.获取参数
    cid=request.args.get("cid","1")
    page=request.args.get("page","1")
    per_page=request.args.get("per_page","10")
    # 2.参数类型转换,为了分页 做准备,paginate(page,per_page,False)
    try:
        page = int(page)  # 当前页
        per_page = int(per_page)   # 每页个数
    except Exception as e:
        page = 1
        per_page = 10

    condition = ""
    # 3.分页查询
    try:
        if cid != "1":
            condition = News.category_id == cid
        paginate = News.query.filter(condition).order_by(News.create_time.desc()).paginate(page, per_page, False)
    except Exception as e:
        return jsonify(errno=RET.DBERR,errmsg="获取新闻失败")

    # 4.取出分页对象中的属性,总页数,当前页,当前页对象
    totalPage = paginate.pages
    currentPage = paginate.page
    items = paginate.items

    # 5.将当前页对象列表,转成字典列表
    newsList = []
    for item in items:
        newsList.append(item.to_dict())

    # 6.返回响应
    return jsonify(errno=RET.OK,errmsg="获取成功",totalPage=totalPage,currentPage=currentPage,newsList=newsList)







# 使用蓝图装饰视图函数
@index_blue.route("/")
@user_login_data
def index():
    # redis_data.set("name","laowang")
    # redis_data.set("lalala","shishi")
    #
    # print(redis_data.get("name"))

    # session["hg"]="zjx"
    # print(session.get("hg"))

    #使用loggin日志模块输出内容
    # logging.debug("调试信息1")
    # logging.info("详细信息1")
    # logging.warning("警告信息1")
    # logging.error("错误信息1")

    #上面的方式可以使用current_app输出,在控制台输出的时候有华丽分割线,写入到文件是一样的
    # current_app.logger.debug("调试信息2")
    # current_app.logger.info("详细信息2")
    # current_app.logger.warning("警告信息2")
    # current_app.logger.error("错误信息2")

    # user_id = session.get("user_id")
    #
    # user =None
    #
    # if user_id:
    #     try:
    #         user = User.query.get(user_id)
    #     except Exception as e:
    #         current_app.logger.error(e)
    #         print("获取正在登陆的用户信息失败")

    # 获取热门新闻数据
    try:
        news_list = News.query.order_by(News.clicks.desc()).limit(10).all()
        # news_list = News.query.onder_by(News.clicks.desc()).limit(10).all()
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR,errmsg="获取新闻失败")
    click_news_list = []
    for news in news_list:
        click_news_list.append(news.to_dict())

    # 获取分类信息列表
    try:
        category_obj_list = Category.query.all()
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR,errmsg="获取新闻种类失败")

    category_list = []
    for category in category_obj_list:
        category_list.append(category.to_dict())


    data = {
        "user_info":g.user.to_dict() if g.user else "",
        "click_news_list":click_news_list,
        "category_list":category_list

    }

    return render_template("news/index.html", data = data)


# 浏览器在访问一个新的网站时都会发送 "GET /favicon.ico HTTP/1.1"　请求来获取网站ｌｏｇｏ
# 所以只要在 /favicon.ico　访问路径中返回ｌｏｇｏ即可
@index_blue.route("/favicon.ico")
def web_logo():
    return current_app.send_static_file("news//favicon.ico")


